/**
 * @作者 7七月
 * @微信公号 林间有风
 * @开源项目 $ http://7yue.pro
 * @免费专栏 $ http://course.7yue.pro
 * @我的课程 $ http://imooc.com/t/4294850
 * @创建时间 2023/2/26 9:21 下午
 */
package com.itzhouwei.commerce.thread.core.demo7;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 支付成功之后，异步发送短信通知用户；
 * 公司的OA系统中，提交某些申请之后，异步发送给各个部门负责人进行审批；
 * 请求某个接口时，需要做些日志上报之类的记录。
 * @description:<h1>线程池</h1>
 * @author：zw，微信公共号：yingshengzw
 * @date: 2021/8/28
 * @Copyright：公众号：搬砖暗夜码农 | 博客：https://itzhouwei.com - 沉淀、学习、分享、成长，让自己和他人都能有所收获！
 */
public class ThreadExecutorDemo {

    public static void main(String[] args) {


        /***
         * ThreadPoolExecutor 方法的参数说明
         * corePoolSize 核心线程数；
         * maximumPoolSize 最大线程数；
         * keepAliveTime 线程活跃时间；
         * zaResizableCapacityLinkedBlockingQueue 基于 JDK 改造的可伸缩队列；
         * allowCoreThreadTimeOut 允许核心线程数超时后被回收；
         * preStartCoreThread 是否要在一开始就启动 corePoolSize 数量的线程数
         * preStartAllCoreThreads 是否要在一开始就启动 maximumPoolSize 数量的线程数
         */
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                1,
                1,
                1,
                TimeUnit.SECONDS, new ArrayBlockingQueue<>(1000));
        //submit	future对象	如果出现异常，会将异常自动抛出 都可以实现异步操作效果
        threadPoolExecutor.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("this is submitTask");
            }
        });

      //  execute	空	如果出现异常，并且没有加 try-catch 块，线程池会将异常给吞掉。
        //  都可以实现异步操作效果
        threadPoolExecutor.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println("this is executeTask");
            }
        });
    }
}
